Add current_package to the Context
authorAleksey Kladov <aleksey.kladov@gmail.com>
Wed, 17 Aug 2016 19:20:09 +0000 (22:20 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 18 Aug 2016 18:49:28 +0000 (21:49 +0300)
src/cargo/ops/cargo_rustc/context.rs
src/cargo/ops/cargo_rustc/job_queue.rs
src/cargo/ops/cargo_rustc/mod.rs

index 49236afea9d813d3229b6904bf3c96b7b52f0a2b..03c0b0d1881d674df531482eb09e21cb83b2545a 100644 (file)
@@ -29,6 +29,7 @@ pub struct Unit<'a> {
 pub struct Context<'a, 'cfg: 'a> {
     pub config: &'cfg Config,
     pub resolve: &'a Resolve,
+    pub current_package: PackageId,
     pub compilation: Compilation<'cfg>,
     pub packages: &'a PackageSet<'cfg>,
     pub build_state: Arc<BuildState>,
@@ -74,10 +75,13 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
         let engine = build_config.exec_engine.as_ref().cloned().unwrap_or({
             Arc::new(Box::new(ProcessEngine))
         });
+        let current_package = try!(ws.current()).package_id().clone();
+        assert_eq!(&current_package, resolve.root());
         Ok(Context {
             host: host_layout,
             target: target_layout,
             resolve: resolve,
+            current_package: current_package,
             packages: packages,
             config: config,
             target_info: TargetInfo::default(),
@@ -274,7 +278,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
 
     /// Returns the appropriate directory layout for either a plugin or not.
     pub fn layout(&self, unit: &Unit) -> LayoutProxy {
-        let primary = unit.pkg.package_id() == self.resolve.root();
+        let primary = unit.pkg.package_id() == &self.current_package;
         match unit.kind {
             Kind::Host => LayoutProxy::new(&self.host, primary),
             Kind::Target => LayoutProxy::new(self.target.as_ref()
@@ -704,7 +708,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
     }
 
     pub fn show_warnings(&self, pkg: &PackageId) -> bool {
-        pkg == self.resolve.root() || pkg.source_id().is_path() ||
+        pkg == &self.current_package || pkg.source_id().is_path() ||
             self.config.extra_verbose()
     }
 }
index 92d72135a2f4120915e15b7b0f9e7c2707100a54..a0cb1dddee991a5b523a4c5190f29b9b77fe2cd1 100644 (file)
@@ -199,7 +199,7 @@ impl<'a> JobQueue<'a> {
         }
 
         let build_type = if self.is_release { "release" } else { "debug" };
-        let profile = cx.lib_profile(cx.resolve.root());
+        let profile = cx.lib_profile(&cx.current_package);
         let mut opt_type = String::from(if profile.opt_level == "0" { "unoptimized" }
                                         else { "optimized" });
         if profile.debuginfo {
index f0811e03c00cf5856d68f7c53b3ce22e1cd22c38..b36ed3cebd14ab52a784a96215de750e81013013 100644 (file)
@@ -81,7 +81,7 @@ pub fn compile_targets<'a, 'cfg: 'a>(ws: &Workspace<'cfg>,
         })
     }).collect::<Vec<_>>();
 
-    let root = try!(packages.get(resolve.root()));
+    let root = try!(ws.current());
     let mut cx = try!(Context::new(ws, resolve, packages, config,
                                    build_config, profiles));
 
@@ -229,7 +229,7 @@ fn rustc(cx: &mut Context, unit: &Unit) -> CargoResult<Work> {
     let do_rename = unit.target.allows_underscores() && !unit.profile.test;
     let real_name = unit.target.name().to_string();
     let crate_name = unit.target.crate_name();
-    let move_outputs_up = unit.pkg.package_id() == cx.resolve.root();
+    let move_outputs_up = unit.pkg.package_id() == &cx.current_package;
 
     let rustc_dep_info_loc = if do_rename {
         root.join(&crate_name)
@@ -504,7 +504,7 @@ fn build_base_args(cx: &Context,
     let prefer_dynamic = (unit.target.for_host() &&
                           !unit.target.is_custom_build()) ||
                          (crate_types.contains(&"dylib") &&
-                          unit.pkg.package_id() != cx.resolve.root());
+                          unit.pkg.package_id() != &cx.current_package);
     if prefer_dynamic {
         cmd.arg("-C").arg("prefer-dynamic");
     }